import pandas as pd
import matplotlib.pyplot as plt

# 读取用户上传的文件
df = pd.read_excel("问题二数据.xlsx")

# 显示文件的前几行以了解其结构和内容
df.head()

# 修正列映射和计算函数
columns_mapping_fixed = {
    '情况': '情况',
    '零件1次品率': '零件1次品率',
    'Unnamed: 2': '零件1购买单价',
    'Unnamed: 3': '零件1检测成本',
    '零件2次品率': '零件2次品率',
    'Unnamed: 5': '零件2购买单价',
    'Unnamed: 6': '零件2检测成本',
    '成品次品率': '成品次品率',
    'Unnamed: 8': '成品装配成本',
    'Unnamed: 9': '成品检测成本',
    'Unnamed: 10': '市场售价',
    '不合格成品调换损失': '不合格成品调换损失',
    '拆解费用': '拆解费用'
}

# 重新应用列名映射
df.rename(columns=columns_mapping_fixed, inplace=True)

# 将非数字字符串替换为NaN
for col in df.columns:
    if df[col].dtype == object:
        df[col] = pd.to_numeric(df[col], errors='coerce')

# 填充NaN值
df.fillna(0, inplace=True)

# 定义计算总成本和产品质量率的函数
def calculate_total_cost_and_quality_rate_based_on_actual_columns(row):
    # 直接使用列的索引进行访问，避免列名混淆
    p1 = float(row[1])  # 零件1次品率
    p2 = float(row[4])  # 零件2次品率
    p_final = float(row[7])  # 成品次品率
    C_disassembly = float(row[12])  # 拆解费用
    C_replacement = float(row[11])  # 不合格成品调换损失
    C_inspection_part = float(row[3]) + float(row[6])  # 零件1和零件2的检测成本
    C_inspection_final = float(row[9])  # 成品检测成本
    cost_part1 = float(row[2])  # 零件1购买单价
    cost_part2 = float(row[5])  # 零件2购买单价
    price_final = float(row[10])  # 市场售价

    # 简化计算总成本和产品质量率
    total_cost = (C_inspection_part * (p1 + p2) + C_inspection_final * p_final) + (C_disassembly * p_final) + (C_replacement * p_final)+cost_part1+cost_part2
    quality_rate = 1 - (p1 + p2 - p1*p2 + p_final - p1*p_final - p2*p_final + p1*p2*p_final)

    return total_cost, quality_rate

# 应用函数计算每一行的总成本和产品质量率
df['总成本'], df['产品质量率'] = zip(*df.apply(calculate_total_cost_and_quality_rate_based_on_actual_columns, axis=1))

# 显示结果
print(df[['总成本', '产品质量率']])

# 绘制柱状图
plt.figure(figsize=(10, 5))
plt.bar(df.index[1:], df['总成本'][1:], label='allcost')
plt.xlabel('ID')
plt.ylabel('allcost')
plt.title('coat')
plt.legend()
plt.show()

# 绘制折线图
plt.figure(figsize=(10, 5))
plt.plot(df.index[1:], df['产品质量率'][1:], label='pqr', marker='o')
plt.xlabel('ID')
plt.ylabel('pqr')
plt.title('pqrLc')
plt.legend()
plt.show()


